#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mycamera.h"
#include <QPixmap>
#include "usart.h"

extern int flag; //摄像头线程标志位
volatile unsigned int allcardid; //保存当前接触的卡号
bool  is_carid=false; // 如果有卡接触就是true
bool  car_ID=false;//这个变量再阿里云返回  正确 值变为  true   如果true 点击车位才能变红
bool  is_memcpy=true;//这个变量，当false 时不进行屏幕映射
bool  all_label_2=false;//用于判断标签二是不是空的，不是true的就录入信息
QString   all_carid;//存放车牌号
QString time_in;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton_4->hide();
    //ui->pushButton->hide();

    area_now=A;//初始化区域位A区
    car_map.insert("A-01",0);
    car_map.insert("A-02",0);
    car_map.insert("A-03",0);
    car_map.insert("A-04",0);
    car_map.insert("A-05",0);
    car_map.insert("A-06",0);

    car_map.insert("B-01",0);
    car_map.insert("B-02",0);
    car_map.insert("B-03",0);
    car_map.insert("B-04",0);
    car_map.insert("B-05",0);
    car_map.insert("B-06",0);

    car_map.insert("C-01",0);
    car_map.insert("C-02",0);
    car_map.insert("C-03",0);
    car_map.insert("C-04",0);
    car_map.insert("C-05",0);
    car_map.insert("C-06",0);

    car_map.insert("D-01",0);
    car_map.insert("D-02",0);
    car_map.insert("D-03",0);
    car_map.insert("D-04",0);
    car_map.insert("D-05",0);
    car_map.insert("D-06",0);

    car_map.insert("E-01",0);
    car_map.insert("E-02",0);
    car_map.insert("E-03",0);
    car_map.insert("E-04",0);
    car_map.insert("E-05",0);
    car_map.insert("E-06",0);

    car_map.insert("F-01",0);
    car_map.insert("F-02",0);
    car_map.insert("F-03",0);
    car_map.insert("F-04",0);
    car_map.insert("F-05",0);
    car_map.insert("F-06",0);

    connect(mycamera::get(), &mycamera::sigImg, this, &MainWindow::slotImg);
    mycamera::get()->start();
    flag=1;

    //***************数据库代码
    //安装数据库的驱动--》我电脑上用的是sqlite3
    mybase=QSqlDatabase::addDatabase("QSQLITE");

    //设置数据库的路径名
    mybase.setDatabaseName("./1.db");

    //打开数据库
    bool ret=mybase.open();
    if(!ret)
    {
        qDebug()<<"打开数据库失败了!./1.db no open";
        return;
    }

    //在数据库中新建卡号 和 车牌号  进入时间  刷次数                   卡号     和  车牌号       进入时间    刷次数  车位 carbot
    QSqlQuery query(mybase);
    //执行新建表格语句    表的名字   car_in_out_table
   // ret=query.exec("create table if not exists producetable (name text,price float);");
    // ret=query.exec("create table if not exists producetable1 (rfid text,carid text,intime text);");
     //在数据库中新建卡号 和 车牌号  进入时间  刷次数                   卡号     和  车牌号        进入时间    刷次数  车位 carbot
   ret=query.exec("create table if not exists car_in_out_table (rfid  text,carid text ,intotime text,cs int,carbot text);");
    if(!ret)
    {
        qDebug()<<"新建表格失败的原因: "<<query.lastError().text();
        return;
    }
    //**************************

    //*****第二个表，保存所有信息*******
    //新建一个  保存所有记录
    QSqlQuery query1(mybase);
     //   all_car_in_out_table    在数据库中新建卡号 和 车牌号  进入时间  刷次数       卡号     和  车牌号        进入时间    刷次数  车位  状态 (进入还是出去)
    ret=query1.exec("create table if not exists all_car_in_out_table (rfid  text,carid text,intotime text,cs int,carbot text,ZT text);");
    if(!ret)
    {

        qDebug()<<"新建所有的车表格表格失败的原因: "<<query.lastError().text();
        return;
    }

    QTimer *time=new QTimer(this);
    time->setInterval(1000);//设置超时时间
    connect(time,SIGNAL(timeout()),this,SLOT(time_out_fun()));
    time->start();

    connect(Client::get(), &Client::sigCar, this, &MainWindow::slotCar);

    QTimer *sqltime=new QTimer(this);
    sqltime->setInterval(100);//100ms
    connect(sqltime,SIGNAL(timeout()),this,SLOT(sqltime_fun()));
    sqltime->start();

    Rfid::Get()->start();
//    connect(Rfid::get(), &Rfid::sigCard, this, &MainWindow::slotCar);

    connect(&myManager2,SIGNAL(finished(QNetworkReply *)),this,SLOT(date_weather(QNetworkReply *)));
    show_weather();

    QTimer *Look_map =new QTimer(this);   //专门核查数据里的停车位和显示的停车位
    Look_map->setInterval(3000);//10s  不需要很快
    connect(Look_map,SIGNAL(timeout()),this,SLOT(Look_map_fun()));
    Look_map->start();
}

MainWindow::~MainWindow()
{
    delete ui;
}

//用于更新停车位的字面意思
void MainWindow::set_car_text(int &num)
{
    QString abc;
    if(num==A)
    {
        ui->car1->setText("A-01");
        ui->car2->setText("A-02");
        ui->car3->setText("A-03");
        ui->car4->setText("A-04");
        ui->car5->setText("A-05");
        ui->car6->setText("A-06");
        abc="A";
    }
    if(num==B)
    {
        ui->car1->setText("B-01");
        ui->car2->setText("B-02");
        ui->car3->setText("B-03");
        ui->car4->setText("B-04");
        ui->car5->setText("B-05");
        ui->car6->setText("B-06");
         abc="B";
    }
    if(num==C)
    {
        ui->car1->setText("C-01");
        ui->car2->setText("C-02");
        ui->car3->setText("C-03");
        ui->car4->setText("C-04");
        ui->car5->setText("C-05");
        ui->car6->setText("C-06");
         abc="C";
    }
    if(num==D)
    {
        ui->car1->setText("D-01");
        ui->car2->setText("D-02");
        ui->car3->setText("D-03");
        ui->car4->setText("D-04");
        ui->car5->setText("D-05");
        ui->car6->setText("D-06");
         abc="D";
    }
    if(num==E)
    {
        ui->car1->setText("E-01");
        ui->car2->setText("E-02");
        ui->car3->setText("E-03");
        ui->car4->setText("E-04");
        ui->car5->setText("E-05");
        ui->car6->setText("E-06");
         abc="E";
    }
    if(num==F)
    {
        ui->car1->setText("F-01");
        ui->car2->setText("F-02");
        ui->car3->setText("F-03");
        ui->car4->setText("F-04");
        ui->car5->setText("F-05");
        ui->car6->setText("F-06");
        abc="F";
    }

    for(int i=1;i<=6;i++)
    {
        QString  key =   QString("%1-0%2").arg(abc).arg(i);
        //通过键得到值
        unsigned int value  =  car_map.value(key);
        //qDebug()<<"hh"<<value;

        if(value==0)
        {
          if(i==1)
          {
              ui->car1->setStyleSheet("background-color: rgb(215, 255, 251);");//红色 rgb(215, 255, 251)
          }
          if(i==2)
          {
              ui->car2->setStyleSheet("background-color: rgb(215, 255, 251);");//红色 rgb(215, 255, 251)
          }
          if(i==3)
          {
              ui->car3->setStyleSheet("background-color: rgb(215, 255, 251);");//红色 rgb(215, 255, 251)
          }
          if(i==4)
          {
              ui->car4->setStyleSheet("background-color: rgb(215, 255, 251);");//红色 rgb(215, 255, 251)
          }
          if(i==5)
          {
              ui->car5->setStyleSheet("background-color: rgb(215, 255, 251);");//红色 rgb(215, 255, 251)
          }
          if(i==6)
          {
              ui->car6->setStyleSheet("background-color: rgb(215, 255, 251);");//红色 rgb(215, 255, 251)
          }


        }
        else
        {
          if(i==1)
          {
             // qDebug()<<"FF"<<value;

              ui->car1->setStyleSheet("background-color: rgb(255, 0, 0);");//红色 rgb(215, 255, 251)
          }
          if(i==2)
          {
              ui->car2->setStyleSheet("background-color: rgb(255, 0, 0);");//红色 rgb(215, 255, 251)
          }
          if(i==3)
          {
              ui->car3->setStyleSheet("background-color: rgb(255, 0, 0);");//红色 rgb(215, 255, 251)
          }
          if(i==4)
          {
              ui->car4->setStyleSheet("background-color: rgb(255, 0, 0);");//红色 rgb(215, 255, 251)
          }
          if(i==5)
          {
              ui->car5->setStyleSheet("background-color: rgb(255, 0, 0);");//红色 rgb(215, 255, 251)
          }
          if(i==6)
          {
              ui->car6->setStyleSheet("background-color: rgb(255, 0, 0);");//红色 rgb(215, 255, 251)
          }

        }

    }
}

//显示当前时间
void MainWindow::time_out_fun()
{
   QDate  mydata=QDate::currentDate();
   //qDebug()<<mydata.year()<<"年";
   QTime mytime=QTime::currentTime();
   //把返回值转换为字符串格式
   QString str =mydata.toString("yyyy-MM-dd");
   QString str1=mytime.toString("hh-mm-ss");
   ui->lcdNumber->display(str);
   ui->lcdNumber_2->display(str1);
}

//管理员登录按钮
void MainWindow::on_pushButton_clicked()
{
    administrators * manager=new administrators(this);
//    mybase.close();
    //cam->camera_uninit();//关闭摄像头开发板屏幕上的映射
    //all_cam=cam;
    this->hide();
    manager->show();
}

//点击了左箭头
void MainWindow::on_pushButton_3_clicked()
{
    area_now--;
    if(area_now<A)
    {
        area_now=F;
    }

    qDebug()<<"点击了左箭头"<<area_now;
    MainWindow::set_car_text(area_now);
}
//点击了右箭头
void MainWindow::on_pushButton_2_clicked()
{
    area_now++;
    if(area_now>F)
    {
        area_now=A;
    }
    qDebug()<<"点击了右箭头"<<area_now;
    MainWindow::set_car_text(area_now);
}

//启动摄像头 开启线程
void MainWindow::on_pushButton_5_clicked()
{
    flag=1;
}

//关闭摄像头
void MainWindow::on_pushButton_6_clicked()
{
    //被迫更换另外一套方案：使用经典的编程套路--》标志位
    flag=0;
}

void MainWindow::slotCar(QString id, QString time)
{
    static QTimer *timer = new QTimer(this);
    timer->setSingleShot(true);

    if(timer->isActive())
        return ;
    timer->start(5000);

    qDebug() << id << " " << time;
    //先判断这个车牌号在不在表里面 如果在说明是出来直接进入计费环节
    QString cmd=QString("select * from car_in_out_table  where carid='%1';").arg(id);
    //执行查询语句
    QSqlQuery query(mybase);
    bool ret=query.exec(cmd);
    if(!ret)
    {
        qDebug()<<"查询失败的原因: "<<query.lastError().text();
        return;
    }
    bool  ok=true;//这个变量下面就要用
    //循环遍历查询结果
//    qDebug()<<"while look: ";
    while(query.next())
    {
        QString q1=query.value(0).toString();
        QString q2=query.value(1).toString();
        QString q3=query.value(2).toString();
        QString q4=query.value(3).toString();
        QString q5=query.value(4).toString();
        /*
        qDebug()<<"id"<<q1;
        qDebug()<<"carid"<<q2;
        qDebug()<<"intoyime"<<q3;
        qDebug()<<"time"<<q4;
        qDebug()<<"carbot"<<q5;*/
        //if(q2.size()>3)
        {
            qDebug()<<"out";//这个车已经存在
            ok = false;
            //执行计费函数
            Rfid::Get()->sendData(1);
            totalmoneny(q1,q2,q3,q4,q5);
        }
    }
    if(ok)
    {
        qDebug() << "in";
        all_carid.clear();
        all_carid = id;
        time_in = time;

        ui->car_lab->setText(QString("欢迎%1的车主，请选择停车位").arg(id));
        Rfid::Get()->sendData(2);

    }

}

//用于时刻关注lab2是否为空
void MainWindow::sqltime_fun()
{
    QString carbot= ui->label_2->text();

    if(!carbot.isEmpty())//非空，
    {
        if(all_carid.size()>3)//车牌号有效
        {
            ui->car_lab->setText("");
            QString txt;
            txt=all_carid;
            //录入信息
            //1 卡号
            QString  rfid =QString::number(123456);//allcarid 是真实的卡号
            //2 车牌号 txt
            //3 进入时间
            //进入日期
            QDate  mydata=QDate::currentDate();

            QTime mytime=QTime::currentTime();
            //把返回值转换为字符串格式
            QString str =mydata.toString("yyyy-MM-dd");
            QString str1=mytime.toString("hh-mm-ss");

            QString intodate;
            intodate= time_in;//str+" "+str1;
            //4  刷次数
            QString Time;//次数
            Time="1";
            //车位   carbot
            //拼接得到完整的插入语句
            QString cmd=QString("insert into car_in_out_table values ('%1','%2','%3',%4,'%5');").arg(rfid).arg(txt).arg(intodate).arg( Time).arg(carbot);

            //执行插入语句
            QSqlQuery query(mybase);
            bool ret=query.exec(cmd);
            if(!ret)
            {
                qDebug()<<"插入失败的原因: "<<query.lastError().text();
                return;
            }
            else //录入成功
            {
                qDebug()<<"input ok";
                //车牌信息清空
                all_carid.clear();
                //把标签二的文本信息清空
                QString is_NUll;
                is_NUll.clear();
                ui->label_2->setText(is_NUll);

                //录入成功的话给all也录入一份
                QString ZT;//状态
                ZT="进入";
                //拼接得到完整的插入语句
                QString cmd=QString("insert into all_car_in_out_table values ('%1','%2','%3',%4,'%5','%6');").arg(rfid).arg(txt).arg(intodate).arg( Time).arg(carbot).arg(ZT);

                //执行插入语句
                QSqlQuery query(mybase);
                bool ret=query.exec(cmd);
                if(!ret)
                {
                    qDebug()<<"alltablr插入失败的原因: "<<query.lastError().text();
                    return;
                }
            }
        }
    }
}

//计费
void MainWindow::totalmoneny(QString rfid,QString carid,QString intimr,QString time,QString carbotx)
{
    QString rfid1;
    QString carid1;
    QString intotime1;
    QString time1;
    QString carbot;

    rfid1=rfid;
    carid1=carid;
 //   intotime1=intimr;
    time1=time;
    carbot=carbotx;
#if 0
    QString y1=intotime1.mid(0,4);
    QString m1=intotime1.mid(5,2);
    QString d1=intotime1.mid(8,2);
    QString s1=intotime1.mid(11,2);
    QString f1=intotime1.mid(14,2);
    QString mm1=intotime1.mid(17,2);

    int  year=y1.toInt();
    int  mon =m1.toInt();
    int  day=d1.toInt();
    int  Hour=s1.toInt();
    int  minute=f1.toInt();
    int  second=mm1.toInt();

    //***************获取当前时间
    //进入日期
    QDate  mydata=QDate::currentDate();
    QTime mytime=QTime::currentTime();
    //把返回值转换为字符串格式
    QString str =mydata.toString("yyyy-MM-dd");
    QString str1=mytime.toString("hh-mm-ss");

    QString outdate;
    outdate=str+" "+str1;
    QString y11=str.mid(0,4);
    QString m11=str.mid(5,2);
    QString d11=str.mid(8,2);
    QString s11=str1.mid(0,2);
    QString f11=str1.mid(3,2);
    QString mm11=str1.mid(6,2);

    int  year11=y11.toInt();
    int  mon11 =m11.toInt();
    int  day11=d11.toInt();
    int  Hour11=s11.toInt();
    int  minute11=f11.toInt();
    int  second11=mm11.toInt();
#endif

    //开始计算费用
    //日期差可以用
//    QDateTime startDate(QDate(2012, 7, 6), QTime(8, 30, 0));
//    QDateTime endDate(QDate(2012, 7, 7), QTime(16, 30, 0));
//      qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);
    // 将时间戳字符串转换为QDateTime对象
        QDateTime startDate = QDateTime::fromString(intimr, "yyyy-MM-dd_hh_mm_ss");
        QDateTime endDate = QDateTime::currentDateTime();
QString outdate = endDate.toString("yyyy-MM-dd_hh_mm_ss");
        // 计算时间间隔
        //qint64 seconds = dateTime1.secsTo(dateTime2);
    //QDateTime startDate(QDate(year, mon,day), QTime(Hour, minute, second));
    //QDateTime endDate(QDate(year11, mon11, day11), QTime(Hour11, minute11, second11));
      qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);//获得时间间隔  按天算
      int JG=startDate.secsTo(endDate);//时间间隔  秒
      qDebug() << "时间间隔是 " <<startDate.secsTo(endDate)<<" 秒";//获得时间间隔 秒
       qDebug() << "时间间隔是 " <<startDate.secsTo(endDate)/60/60<<" 小时"; //获得时间将小时


    int moneny=2;//每秒费用
    int allmoneny=JG*moneny;
    if(allmoneny>999)
        allmoneny=900;//秒太快了  设置一个上限
     QString SB;
     QString SB2=QString::number(allmoneny);

     SB=QString("费用是:%1").arg(SB2);
     ui->label_3->setText(SB);
     ui->car_lab->setText(SB);
     is_memcpy=false;//先解除映射
     QString  mess=QString("尊敬的%1的车主，请付费%2元").arg(carid).arg(SB2);
     auto myret =  QMessageBox::warning(this,"请付费",mess);
     if(myret)
       is_memcpy=true;//重启映射

     //再把这个车子删掉
     QSqlQuery query(mybase);
     QString mymod=QString("delete from car_in_out_table where carid = '%1';").arg(carid);
    bool ret=query.exec(mymod);

 //    bool ret=query.exec(cmd);
     if(!ret)
     {
         qDebug()<<"no delte: "<<query.lastError().text();
         return;
     }
     else//删除成功
     {
         //删除成功删除成功也要录入一次状态
         //录入成功的话给all也录入一份
         QString ZT;//状态
         ZT="出去";
         QString cs;
         cs="2";//这好像没用了
         //拼接得到完整的插入语句
         QString cmd=QString("insert into all_car_in_out_table values ('%1','%2','%3',%4,'%5','%6');").arg(rfid).arg(carid).arg(outdate).arg(cs).arg(carbotx).arg(ZT);

         //执行插入语句
         QSqlQuery query(mybase);
         bool ret=query.exec(cmd);
         if(!ret)
         {
             qDebug()<<"alltablr插入失败的原因: "<<query.lastError().text();
             return;
         }
     }

     //把删掉的停车位的值变0
     car_map.insert(carbotx,0);//改变他的值 111 随便值
    //***************
}

//停车位1
void MainWindow::on_car1_clicked()
{
    qDebug() << "on_car1_clicked";
    //rgb(215, 255, 251); 是当前颜色
    QString cat_num=ui->car1->text();
    unsigned int  num=car_map.value(cat_num);
    if(num==0)//等于0 说明没有被占  才能被染红
    {
        ui->car1->setStyleSheet("background-color: rgb(255, 0, 0);");//红色

        car_map.insert(cat_num,1111);//改变他的值 111 随便值 非零就不会变回原色  后期考虑改为 卡号
        ui->label_2->setText(ui->car1->text());//为数据库加的
        for (QMap<QString, unsigned int>::const_iterator it = car_map.constBegin(); it != car_map.constEnd(); it++)
        {
           // qDebug() << it.key() << ": " << it.value();
        }
    }
    else
    {
        is_memcpy=false;//先解除映射
        auto myret = QMessageBox::warning(this,"提醒","亲！这个车位有车了，请换一个！");
        if(myret)
            is_memcpy=true;//重启映射
    }
}
//停车位2
void MainWindow::on_car2_clicked()
{
    qDebug() << "on_car2_clicked";
    //rgb(215, 255, 251); 是当前颜色
    QString cat_num=ui->car2->text();
    unsigned int  num=car_map.value(cat_num);
    if(num==0)//等于0 说明没有被占  才能被染红
    {
        ui->car2->setStyleSheet("background-color: rgb(255, 0, 0);");//红色
        car_map.insert(cat_num,1111);//改变他的值 111 随便值 非零就不会变回原色  后期考虑改为 卡号
        ui->label_2->setText(ui->car2->text());//为数据库加的
    }
    else
    {
        is_memcpy=false;//先解除映射
        auto myret = QMessageBox::warning(this,"提醒","亲！这个车位有车了，请换一个！");
        if(myret)
          is_memcpy=true;//重启映射
    }
}
//停车位3
void MainWindow::on_car3_clicked()
{
    qDebug() << "on_car3_clicked";
    QString cat_num=ui->car3->text();
    unsigned int  num=car_map.value(cat_num);
    if(num==0)//等于0 说明没有被占  才能被染红
    {
       ui->car3->setStyleSheet("background-color: rgb(255, 0, 0);");//红色
        car_map.insert(cat_num,1111);//改变他的值 111 随便值 非零就不会变回原色  后期考虑改为 卡号
         ui->label_2->setText(ui->car3->text());//为数据库加的
    }
    else
    {
        is_memcpy=false;//先解除映射
       auto myret = QMessageBox::warning(this,"提醒","亲！这个车位有车了，请换一个！");
        if(myret)
          is_memcpy=true;//重启映射
    }
}
//停车位4
void MainWindow::on_car4_clicked()
{
    qDebug() << "on_car4_clicked";
    QString cat_num=ui->car4->text();
    unsigned int  num=car_map.value(cat_num);
    if(num==0)//等于0 说明没有被占  才能被染红
    {
       ui->car4->setStyleSheet("background-color: rgb(255, 0, 0);");//红色
        car_map.insert(cat_num,1111);//改变他的值 111 随便值 非零就不会变回原色  后期考虑改为 卡号
         ui->label_2->setText(ui->car4->text());//为数据库加的
    }
    else
    {
        is_memcpy=false;//先解除映射
       auto myret = QMessageBox::warning(this,"提醒","亲！这个车位有车了，请换一个！");
        if(myret)
          is_memcpy=true;//重启映射
    }
}
//停车位5
void MainWindow::on_car5_clicked()
{
    qDebug() << "on_car5_clicked";
    QString cat_num=ui->car5->text();
    unsigned int  num=car_map.value(cat_num);
    if(num==0)//等于0 说明没有被占  才能被染红
    {
       ui->car5->setStyleSheet("background-color: rgb(255, 0, 0);");//红色
        car_map.insert(cat_num,1111);//改变他的值 111 随便值 非零就不会变回原色  后期考虑改为 卡号
         ui->label_2->setText(ui->car5->text());//为数据库加的
    }
    else
    {
        is_memcpy=false;//先解除映射
       auto myret = QMessageBox::warning(this,"提醒","亲！这个车位有车了，请换一个！");
        if(myret)
          is_memcpy=true;//重启映射
    }
}
//停车位6
void MainWindow::on_car6_clicked()
{
    qDebug() << "on_car6_clicked";
    QString cat_num=ui->car6->text();
    unsigned int  num=car_map.value(cat_num);
    if(num==0)//等于0 说明没有被占  才能被染红
    {
       ui->car6->setStyleSheet("background-color: rgb(255, 0, 0);");//红色
        car_map.insert(cat_num,1111);//改变他的值 111 随便值 非零就不会变回原色  后期考虑改为 卡号
         ui->label_2->setText(ui->car6->text());//为数据库加的
    }
    else
    {
        is_memcpy=false;//先解除映射
       auto myret = QMessageBox::warning(this,"提醒","亲！这个车位有车了，请换一个！");
        if(myret)
          is_memcpy=true;//重启映射
    }
}

void MainWindow::slotImg(QImage img)
{
    if(flag)
    {
        ui->label_7->setPixmap(QPixmap::fromImage(img));
    }
}

//专门核查数据里的停车位和显示的停车位  也在这里确定剩余车位
void MainWindow::Look_map_fun()
{
      //循环遍历数据库

    //执行查询语句
    QSqlQuery query(mybase);
    bool ret=query.exec("select * from car_in_out_table;");


    if(!ret)
    {
        qDebug()<<"查询失败的原因: "<<query.lastError().text();
        return;
    }

    //循环遍历查询结果
//    qDebug()<<"look look  map: ";
    while(query.next())
    {
        QString q1=query.value(0).toString();
        QString q2=query.value(1).toString();
        QString q3=query.value(2).toString();
        QString q4=query.value(3).toString();
        QString q5=query.value(4).toString();
        /*
          qDebug()<<"id"<<q1;
          qDebug()<<"carid"<<q2;
          qDebug()<<"intoyime"<<q3;
          qDebug()<<"time"<<q4;
          qDebug()<<"carbot"<<q5;
*/
          //通过q5 键  改变车位map的值
          car_map.insert(q5,1111);//改变他的值 111 随便值

    }
    //执行一次
    //用于更新停车位的字面意思
    MainWindow::set_car_text(area_now);

    //查看当前车位剩余
    int num=0;
    //遍历容器
    for (QMap<QString,unsigned int>::const_iterator it = car_map.constBegin(); it != car_map.constEnd(); it++) {
 //          qDebug() << it.key() << ": " << it.value();
           if(it.value()==0)
               num++;
       }
    QString SB;
    QString SB2=QString::number(num);

    SB=QString("剩余车位:%1").arg(SB2);

    ui->label_4->setText(SB);


}


//天气显示
void MainWindow::show_weather()
{
    //第一步：准备好http请求
   //准备好天气识别的api网址
   QUrl myUrl("http://t.weather.itboy.net/api/weather/city/101280101");
   //新建请求对象
   QNetworkRequest *req=new QNetworkRequest(myUrl);
   //第二步:创建QNetworkAccessManager的对象，该对象发送刚才的请求
   myManager2.get(*req);  //发送get请求
}

void MainWindow::date_weather(QNetworkReply *rep)
{
    //读取应答信息
        QByteArray buf=rep->readAll();

        //解析JSON数据：第一步：获取JSON时间规格化存储
        QJsonDocument doc=QJsonDocument::fromJson(buf);
        //第二步：剥洋葱思路，得到最外层数据
        QJsonObject obj=doc.object();

        //第三步：obj1前几行都是键值对，直接通过键获取值
        QJsonValue val1=obj.value("data");
        QJsonObject obj1=val1.toObject();
        QJsonValue val2=obj1.value("forecast");
        QJsonArray array1=val2.toArray(); //观察发现forecast对应的值是个数组，因此我就转换成数组

        //继续搞定array1里面的东西
        //通过QJsonArray中at方法可以得到数组中每个元素
        QJsonValue val3=array1.at(0);
        //肉眼看到val3实际是个对象，并且该对象里面有五个键值对
        QJsonObject obj2=val3.toObject();
        //获取obj2里面的键值对
        QJsonValue val4=obj2.value("type");
        //获取obj2里面的键值对
        QJsonValue val5=obj2.value("high");
        QJsonValue val6=obj2.value("low");

        QString buf1=val4.toString();
        buf1.append(" ");
        QString buf2=val5.toString();
        buf2.append(" ");
        QString buf3=val6.toString();
        QString buf0=buf1+buf2+buf3;

        //在文本编辑框中显示应答信息
        ui->label_6->setText(buf0);
}

